package com.skyd.core.android.game;

import com.skyd.core.vector.VectorRect2DF;

public abstract class GamePixelImageSpirit extends GameSpirit implements
		IGameImageHolder {

	/**
	 * 简单的像素级碰撞测试（不支持旋转、缩放后的对象的碰撞测试，也不支持使用相对场景缩放的对象与使用绝对尺寸及位置的对象间进行测试）
	 * 
	 * @param targetObj
	 *            测试目标对象
	 * @return 是否已发生碰撞
	 */
	public boolean PixelSimpleHitTest(GamePixelImageSpirit targetObj) {
		VectorRect2DF s = new VectorRect2DF(this
				.getPosition().plusNew(
						this.getPositionOffset()), this
				.getSize().getClone());
		VectorRect2DF t = new VectorRect2DF(targetObj
				.getPosition().plusNew(
						targetObj.getPositionOffset()),
				targetObj.getSize().getClone());
		VectorRect2DF c = s.getIntersectRect(t);
		if (c == null)
			return false;
		float ssc = this.getDisplayImage().getHitTestMaskImage().getBitmap().getWidth()/s.getWidth();
		VectorRect2DF sc = new VectorRect2DF(c.getPosition().minusNew(
				s.getPosition()).scale(ssc), c.getSize().scaleNew(ssc));
		int[] spx = this.getDisplayImage().getHitTestMaskImagePixels(sc);
		float tsc = targetObj.getDisplayImage().getHitTestMaskImage().getBitmap().getWidth()/t.getWidth();
		VectorRect2DF tc = new VectorRect2DF(c.getPosition().minusNew(
				t.getPosition()).scale(tsc), c.getSize().scaleNew(tsc));
		int[] tpx = targetObj.getDisplayImage().getHitTestMaskImagePixels(tc);
		for (int i = 0; i < spx.length; i++) {
			if (spx[i] >> 24 != 0 && tpx[i] >> 24 != 0)
				return true;
		}
		return false;
	}
	
	//要实现复杂的完整功能的碰撞测试，应当首先实现游戏对象的“获取矩阵”功能，以此来获取一个经过位移、缩放、旋转后的矩阵，用以作为参数对图片进行变形后再进行碰撞比较测试，此外在初步判断所使用的矩形也未考虑旋转、缩放，必须加以考虑
}
